#include <opencv2/opencv.hpp>
#include <iostream>

int main()
{
    // 打开摄像头
    cv::VideoCapture cap(0); // 0表示默认摄像头
    if (!cap.isOpened())
    {
        std::cout << "Could not open the camera!" << std::endl;
        return -1;
    }
    cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
    cv::Mat frame;
    while (true)
    {
        // 读取一帧
        cap >> frame;
        if (frame.empty())
        {
            std::cout << "Could not read frame!" << std::endl;
            break;
        }

        // 获取图像的中心位置
        int centerX = frame.cols / 2;
        int centerY = frame.rows / 2;

        // 提取中心5x5像素的区域
        cv::Rect roi(centerX - 2, centerY - 2, 5, 5);
        cv::Mat centerRegion = frame(roi);

        // 计算该区域的平均RGB值
        cv::Scalar meanColor = cv::mean(centerRegion);

        // 输出平均RGB值
        std::cout << "Average RGB values: ("
                  << meanColor[2] << ", " // R
                  << meanColor[1] << ", " // G
                  << meanColor[0] << ")"  // B
                  << std::endl;

        // 在图像上标出中心5x5区域
        cv::rectangle(frame, roi, cv::Scalar(0, 255, 0), 1);

        // 显示图像
        cv::imshow("Camera Feed", frame);

        // 按下ESC键退出循环
        if (cv::waitKey(30) == 27)
        {
            break;
        }
    }

    // 释放摄像头并关闭窗口
    cap.release();
    cv::destroyAllWindows();

    return 0;
}
